#Python中的每个值都有一个数据类型。由于在Python编程中一切都是对象，因此数据类型实际上是类，而变量是这些类的示例（对象）。

"""Python 数字(Number)"""

#整数、浮点数和复数都属于Python数字的范畴。在Python中，它们被定义为 int、float 和 complex类。
#我们可以使用type()函数来判断一个变量或值属于哪个类。同样地，isinstance() 函数用于检查对象是否属于特定的类。

a = 5
print(a, "的类型是  ", type(a))

a = 2.0
print(a, "的类型是  ", type(a))

a = 1+2j
print(a, "是复数吗?", isinstance(1+2j,complex))

#整数可以是任意长度，但受可用内存的限制。
#浮点数最多可精确到 15 个小数位。整数 和 浮点由小数点分隔。1 是整数，1.0 是浮点数。
#复数以  x + yj 形式书写，其中x是实部，y是虚部。这里有些示例。

"""Python 列表(List)"""

#列表是项目的有序序列。它是Python中最常用的数据类型之一，非常灵活。列表中的项目允许不是同一类型。
#声明列表非常简单。用逗号分隔的项目放在方括号内[ ]。

a = [1, 2.2, 'python']

#我们可以使用切片运算符 [ ] 从列表中提取一个项目 或 一系列项目。注意，在Python中，索引从 0 开始。

a = [5,10,15,20,25,30,35,40]

# a[2] = 15
print("a[2] = ", a[2])

# a[0:3] = [5, 10, 15]
print("a[0:3] = ", a[0:3])

# a[5:] = [30, 35, 40]
print("a[5:] = ", a[5:])

#列表是可变的，也就是说，列表元素的值可以更改。

a = [1, 2, 3]
a[2] = 4
print(a)

"""Python 元组(Tuple)"""

#元组(Tuple)是项目的有序序列，与列表(List)相同。唯一的区别是元组是不可变的。元组一旦创建就不能修改。

#元组用于写保护数据，通常比列表快，因为它们不能动态更改。

#它在括号内 () 定义，其中各项之间用逗号分隔。

t = (5,'program', 1+3j)

#我们可以使用切片运算符 [] 提取项目，但不能更改其值。

# t[1] = 'program'
print("t[1] = ", t[1])

# t[0:3] = (5, 'program', (1+3j))
print("t[0:3] = ", t[0:3])

#产生错误
#元组是不可变的
#t[0] = 10

"""Python 字符串"""

#字符串是Unicode字符的序列。我们可以使用单引号或双引号来表示字符串。可以使用三引号 ''' 或 """ 来表示多行字符串。

s = "This is a string"
print(s)
s = '''A multiline
string'''
print(s)

#就像列表和元组一样，切片运算符 [ ] 可以与字符串一起使用。但是，字符串是不可变的。

s = 'Hello world!'

# s[4] = 'o'
print("s[4] = ", s[4])

# s[6:11] = 'world'
print("s[6:11] = ", s[6:11])

#发生错误
#字符串在Python中是不可变的
#s[5] ='d'

"""Python 集合(Set)"""

#Set 是唯一项的无序集合。Set 由用大括号 { } 括起来，并由逗号分隔的值的集合。集合中的项目是无序的。

a = {5,2,3,1,4}

# 输出set集变量
print("a = ", a)

# 输出a的数据类型
print(type(a))

#由于 set 是无序集合，因此索引没有意义。因此，切片运算符 [] 不起作用。
#a[1]

"""Python字典"""

#字典是 键值对 的无序集合。
#当我们拥有大量数据时，通常使用它。字典针对检索数据进行了优化。我们必须知道检索值的密钥。
#在Python中，大括号 {} 内定义了字典，每一项都是形式为 key:value 。键 和 值 可以是任何类型。

d = {1:'value','key':2}
type(d)

print("d[1] = ", d[1])

print("d['key'] = ", d['key'])

#产生错误
#print("d[2] = ", d[2])

"""数据类型转换"""

#我们可以通过使用不同类型的转换功能，例如不同的数据类型之间进行转换 int()，float()，str() 等。
print(float(5))

#从float 到 int的转换将截断该值（使其接近零）。
print(int(10.6))
print(int(-10.6))

#字符串之间的转换必须包含兼容的值。
print(float('2.5'))
print(str(25))
#报错
#print(int('1p'))

#我们甚至可以将一个序列转换为另一序列。
print(set([1,2,3]))
print(tuple({5,6,7}))
print(list('hello'))

#要转换为字典，每个元素必须成对：
print(dict([[1,2],[3,4]]))
print(dict([(3,26),(4,44)]))
